home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / apl / apltex_.com / WSBQ.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-02-04  |  2.6 KB  |  81 lines

  1. #include "apl2c_h.h"
  2.  
  3. void main(void);
  4.  
  5. void main (void)
  6. {
  7.      unsigned int aplcs,left,right;
  8.      int res,wsbarg[4];
  9.      struct aplvhdr rarg,larg,result;
  10.  
  11.      aplcs = apl_cs();
  12.      right = peek(aplcs,0x80);
  13.      left = peek(aplcs,0x82);
  14.  
  15.      rarg.ptr = right;      /* load segment value into $PTR field */
  16.      apl_vhdr(&rarg);                  /* load up header info */
  17.      larg.ptr = left;
  18.      apl_vhdr(&larg);
  19.  
  20.      res = 1;
  21.      if( (rarg.type != 1) || (rarg.rank != 1) || (rarg.dimens[0] != 4) )
  22.           res = 0;
  23.      if( (larg.type != 3) || (larg.rank != 2) )
  24.           res = 0;
  25.      if (res)                         /* if okay thus far */
  26.           apl_vfdata(&rarg,(char far *)wsbarg); /* load data for final check */
  27.      if( (larg.dimens[0] != wsbarg[2]) || (larg.dimens[1] != wsbarg[3]) )
  28.           res = 0;
  29.      if(res)                          /* if all okay, write to screen */
  30.           wsb( MK_FP(larg.ptr,12),
  31.                wsbarg[0],wsbarg[1],wsbarg[2],wsbarg[3]);
  32.  
  33.      svp_relm(rarg.ptr);              /* release right arg stuff */
  34.      svp_relm(larg.ptr);              /* release left arg stuff */
  35.  
  36.      result.type = 1;                 /* res type = int */
  37.      result.rank = 1;                 /* vector */
  38.      result.nb = 16;
  39.      result.nelm = 1;
  40.      result.dimens[0] = 1;            /* .. of length 1 */
  41.      result.ptr = svp_getm(1);        /* need only one par */
  42.      poke(result.ptr,10,res);         /* finally, put result into proper */
  43.                                       /* location .. VHDR_APL ONLY loads */
  44.                                       /* header info ... */
  45.      vhdr_apl(&result);               /* put hdr data where APL will find */
  46.      poke(aplcs,0x80,result.ptr);     /* result ptr to APL */
  47.      poke(aplcs,0x82,0);              /* 0 out left arg ptr */
  48.  
  49. }
  50.  
  51. /*
  52.     WSB.C - write screen block
  53. */
  54.  
  55.  
  56. void wsb(bufr,srow,scol,nrows,ncols)
  57. char far * bufr;
  58. int srow,scol,nrows,ncols;
  59. {
  60.      long vidoffset,rowstart,posn;
  61.      int i,j;
  62.      char mon_type;
  63.  
  64.      mon_type = *(char far *) 0x00400049;
  65.      if(mon_type == 7)       /* mono */
  66.           vidoffset = 0xb0000000;
  67.      else
  68.           vidoffset = 0xb8000000;
  69.  
  70.      rowstart = vidoffset + srow * 160;  /* row start for first */
  71.      rowstart += 2 * scol;               /* row of block        */
  72.      for(i = 0;i < nrows;i ++)
  73.        {  posn = rowstart;
  74.           for(j = 0;j < ncols;j ++)
  75.             {  *(char far *)posn = *bufr++;
  76.                posn += 2;                /* next char */
  77.             }
  78.           rowstart += 160;               /* next row */
  79.        }
  80. }
  81.